/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.ces4.produccion.server.services;

import co.com.ces4.produccion.client.MateriaPrimaService;
import co.com.ces4.produccion.jpa.controllers.MateriaPrimaJpaController;
import co.com.ces4.produccion.jpa.controllers.exceptions.IllegalOrphanException;
import co.com.ces4.produccion.jpa.controllers.exceptions.NonexistentEntityException;
import co.com.ces4.produccion.jpa.entities.MateriaPrima;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Sebastian
 */
public class MateriaPrimaServiceImpl extends RemoteServiceServlet implements MateriaPrimaService {

    public void guardarMateriaPrima(MateriaPrima materiaPrima) throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        materiaPrimaJpaController.create(materiaPrima);
    }

    public void actualizarMateriaPrima(MateriaPrima materiaPrima) throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        try {
            materiaPrimaJpaController.edit(materiaPrima);
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, ex.getMessage());
            throw new RuntimeException("Señor usuario, ocurri&oacute; un error inesperado al intentar actualizar la materia prima en la base de datos", ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, "La materia prima que se intenta actualizar no existe en la base de datos" + ex.getMessage());
            throw new RuntimeException("Señor usuario, la materia prima no se encuentra registrada en la base de datos, por tanto no pudo ser actualizada");
        } catch (Exception ex) {
            Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, "Otra excepci&oacute;n:" + ex.getMessage());
            throw new RuntimeException("Señor usuario, ocurri&oacute; un error inesperado al intentar actualizar la materia prima en la base de datos");
        }
    }

    public List<MateriaPrima> getMateriaPrimas() throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        return materiaPrimaJpaController.findMateriaPrimaEntities();
    }

    public List<MateriaPrima> getMateriaPrimaList(String codigo, String descripcion) throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        return materiaPrimaJpaController.getMateriaPrimaList(codigo, descripcion);
    }

    public MateriaPrima getMateriaPrimaXId(Integer codigo) throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        return materiaPrimaJpaController.findMateriaPrima(codigo);
    }

    public void desactivarMateriaPrima(List<MateriaPrima> materiaPrimas) throws RuntimeException {
        MateriaPrimaJpaController materiaPrimaJpaController = (MateriaPrimaJpaController) getServletContext().getAttribute("materiaPrimaJpaController");
        for (MateriaPrima materiaPrima : materiaPrimas) {
            materiaPrima.setSnestado(false);
            try {
                materiaPrimaJpaController.edit(materiaPrima);
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, ex.getMessage());
                throw new RuntimeException("Señor usuario, ocurri&oacute; un error inesperado en el sistema, intente de nuevo m&aacute;s tarde");
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, "Registro no encontrado en la base de datos:" + ex.getMessage());
                throw new RuntimeException("Señor usuario, la materia prima no se encuentra registrada en la base de datos, por tanto no pudo ser desactivada");
            } catch (Exception ex) {
                Logger.getLogger(MateriaPrimaServiceImpl.class.getName()).log(Level.SEVERE, "Otra excepci&oacute;n:" + ex.getMessage());
                throw new RuntimeException("Señor usuario, ocurri&oacute; un error inesperado en el sistema, intente de nuevo m&aacute;s tarde");
            }
        }
    }
}
